Swoją pracę rozpoczęłam od przygotowania bazy danych. W porozumieniu z firmą X weszłam w posiadanie danych sprzedażowych za rok 2017 oraz 2018. Firma zajmuje się detaliczną oraz hurtową dystrybucją odzieży i tekstyliów w Polsce. Dostarczone dane zostały odpowiednio okrojone poprzez usunięcie rekordów z topowymi klientami. Zobowiązałam się również, iż w związku ustawą RODO, usunę wszystkie dane osobowe, pozwalające na identyfikację klientów firmy. Dlatego usunęłam kolumny przedstawiające szczegółowe dane adresowe i kontaktowe. Nazwy kontrahentów podmieniłam na nazwiska olimpijczyków z zewnętrznej bazy danych. Dostarczone baza została wyeksportowana z systemu ERP firmy X i zapisana w postaci plik excel.
Przed wczytaniem danych do RStudio przyjrzałam im się w excelu i zaplanowałam jakie wizualizacje będę tworzyła. Ponieważ dane były zaprezentowane w różnych arkuszach, wybrałam interesujące mnie elementy i za pomocą formuły v-lookup zestawiłam w jednej tabeli. Aby wykonać niektóre z wybranych przez siebie wykresów, musiałam wyszukać w Internecie dodatkowe dane i dodać je do tabeli głównej, m.in. koordynaty geograficzne polskich miast.
Następnie zaimportowałam dane do RStudio. Tam stworzyłam tabele, do której dodałam trzy interesujące mnie kolumny: zysk w euro, całkowita sprzedaż w euro oraz marża. Ponieważ firma, sprzedane towary zakupuje w walucie euro, a sprzedaje w euro jak i w polskich złotych, postanowiłam do celów analitycznych wybrać walutę euro jako główną.
sample1 <- read_delim("sample1.csv",
delim = ";",
escape_double = FALSE,
col_types = cols(`Operation Date` = col_date(format = "%Y%m%d"),
Year = col_factor(levels = c("2017", "2018")),
lat = col_number(),
long = col_number()),
trim_ws = TRUE)
#wyfiltrowac korekty document typy i fracht item type
dane <- sample1 %>% filter(`Document Type` != "Credit Note",
`Item Type` != "Fracht") %>%
mutate(total_sales_in_euro = Quantity*`Item Price`/`Euro Rate`,
profit_in_euro = total_sales_in_euro - `MEK Purchase Value`,
margin = profit_in_euro/total_sales_in_euro)
Moje dane zawierają szczegóły transakcji sprzedażowych firmy X. W kolumnie „Document Type” zawarta jest informacja czy dana operacja była sprzedażą, czy korektą sprzedaży. Będę się zajmowała jedynie sprzedażą, dlatego wybieram typ: Invoice. W kolejnych kolumnach mamy informacje o kontrahencie firmy oraz podstawowe informacje adresowe (kod pocztowy, miejscowość oraz współrzędne geograficzne). W dalszej części tabeli możemy dużo dowiedzieć się o sprzedanym produkcie, min. o jego rodzaju, kolorze, rozmiarze cenie sprzedażowej jak i zakupowej, walucie operacji i sprzedanym wolumenie.
W przedstawionym poniżej projekcie, będę analizowała sprzedaż firmy X, jej strukturę, wysokość, rozłożenie.
str(dane)
## spec_tbl_df [532,616 x 33] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ Document Type : chr [1:532616] "Invoice" "Invoice" "Invoice" "Invoice" ...
## $ Client Number : num [1:532616] 5053313 5053313 5053313 5053313 5053313 ...
## $ Client Name : chr [1:532616] "David Kostelecky" "David Kostelecky" "David Kostelecky" "David Kostelecky" ...
## $ Address 2 : chr [1:532616] "01-461" "01-461" "01-461" "01-461" ...
## $ Address 3 : chr [1:532616] "Warszawa" "Warszawa" "Warszawa" "Warszawa" ...
## $ lat : num [1:532616] 52.2 52.2 52.2 52.2 52.2 ...
## $ long : num [1:532616] 21 21 21 21 21 ...
## $ Payment Method : chr [1:532616] "7 days" "7 days" "7 days" "7 days" ...
## $ Document number : num [1:532616] 2.02e+13 2.02e+13 2.02e+13 2.02e+13 2.02e+13 ...
## $ Operation Date : Date[1:532616], format: "2017-01-02" "2017-01-02" ...
## $ Year : Factor w/ 2 levels "2017","2018": 1 1 1 1 1 1 1 1 1 1 ...
## $ Month : chr [1:532616] "January" "January" "January" "January" ...
## $ Item Code : chr [1:532616] "162851283" "162851284" "162851285" "162851286" ...
## $ Item Color : chr [1:532616] "128" "128" "128" "128" ...
## $ Group Color : chr [1:532616] "Grey" "Grey" "Grey" "Grey" ...
## $ Item Size : num [1:532616] 3 4 5 6 7 4 6 4 5 3 ...
## $ Supplier : chr [1:532616] "85" "85" "85" "85" ...
## $ Style : chr [1:532616] "16285" "16285" "16285" "16285" ...
## $ Item Description : chr [1:532616] "Jack Asphalt S" "Jack Asphalt M" "Jack Asphalt L" "Jack Asphalt XL" ...
## $ Quantity : num [1:532616] 0 0 0 0 0 0 0 0 0 0 ...
## $ Item Price : num [1:532616] 22.4 22.4 22.4 22.4 22.4 ...
## $ Currency : chr [1:532616] "PLN" "PLN" "PLN" "PLN" ...
## $ Euro Rate : num [1:532616] 4.37 4.37 4.37 4.37 4.37 ...
## $ Item Value in Euro : num [1:532616] 0 0 0 0 0 0 0 0 0 0 ...
## $ Item Type : chr [1:532616] "Product" "Product" "Product" "Product" ...
## $ Delivery Method : chr [1:532616] "UPS" "UPS" "UPS" "UPS" ...
## $ Indicator : num [1:532616] 1.06 1.06 1.06 1.06 1.06 1.06 1.07 1.07 1.07 1.07 ...
## $ MEK Item Price : num [1:532616] 4.27 4.27 4.27 4.27 4.27 ...
## $ MEK Purchase Value : num [1:532616] 0 0 0 0 0 0 0 0 0 0 ...
## $ Purchase Value Curency: chr [1:532616] "EUR" "EUR" "EUR" "EUR" ...
## $ total_sales_in_euro : num [1:532616] 0 0 0 0 0 0 0 0 0 0 ...
## $ profit_in_euro : num [1:532616] 0 0 0 0 0 0 0 0 0 0 ...
## $ margin : num [1:532616] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## - attr(*, "spec")=
## .. cols(
## .. `Document Type` = col_character(),
## .. `Client Number` = col_double(),
## .. `Client Name` = col_character(),
## .. `Address 2` = col_character(),
## .. `Address 3` = col_character(),
## .. lat = col_number(),
## .. long = col_number(),
## .. `Payment Method` = col_character(),
## .. `Document number` = col_double(),
## .. `Operation Date` = col_date(format = "%Y%m%d"),
## .. Year = col_factor(levels = c("2017", "2018"), ordered = FALSE, include_na = FALSE),
## .. Month = col_character(),
## .. `Item Code` = col_character(),
## .. `Item Color` = col_character(),
## .. `Group Color` = col_character(),
## .. `Item Size` = col_double(),
## .. Supplier = col_character(),
## .. Style = col_character(),
## .. `Item Description` = col_character(),
## .. Quantity = col_double(),
## .. `Item Price` = col_double(),
## .. Currency = col_character(),
## .. `Euro Rate` = col_double(),
## .. `Item Value in Euro` = col_double(),
## .. `Item Type` = col_character(),
## .. `Delivery Method` = col_character(),
## .. Indicator = col_double(),
## .. `MEK Item Price` = col_double(),
## .. `MEK Purchase Value` = col_double(),
## .. `Purchase Value Curency` = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
Na pierwszym wykresie, przedstawiam dzienną wartość sprzedaży w analizowany okresie. Na stronie data-to-viz znalazłam odpowiedni do tego wykres. Funkcja slidera pozwala na zbliżenie i szczegółowe przejrzenie danych, ale moża również spojrzeć z perspektywy całego okresu.
sprzedaz_data <- dane %>% select(`Operation Date`, total_sales_in_euro)
don <- xts(x = sprzedaz_data$total_sales_in_euro,
order.by = sprzedaz_data$`Operation Date`)
dygraph(don,
main = "Dzienna wartość sprzedaży 2017-2018 ",
xlab = "data",
ylab = "wartość sprzedaży") %>%
dyOptions(labelsUTC = TRUE,
fillGraph=TRUE,
fillAlpha=0.4,
drawGrid = FALSE,
colors="lightblu1") %>%
dyRangeSelector() %>%
dyCrosshair(direction = "vertical") %>%
dyHighlight(highlightCircleSize = 5,
highlightSeriesBackgroundAlpha = 0.2,
hideOnMouseOut = FALSE) %>%
dyRoller(rollPeriod = 1)